package cn.rongdao.jrkabao.base;

import android.view.View;

/**
 * Created by jack on 2018/6/7
 * 懒加载Fragment（结合ViewPager使用）
 */
public abstract class BaseViewPagerFragment extends BaseFragment {

    private boolean isFragmentVisible;   //Fragment是否可见
    protected boolean isFirstLoadData;  //是否第一次加载数据

    /**
     * onViewReallyCreated才是真正创建了View
     */
    protected void onViewReallyCreated(View view) {
        super.onViewReallyCreated(view);
        //可见，但是并没有加载过
        if (isFragmentVisible && !isFirstLoadData) {
            loadData(true);
        }
    }

    /**
     * 懒加载
     */
    private void loadData(boolean isVisible) {
        if (isVisible) {
            lazyLoad();
            isFirstLoadData = true;
        } else {
            stopLoad();
        }
    }

    protected void lazyLoad() {

    }

    protected void stopLoad() {

    }

    /**
     * 这个方法的执行比onCreateView还早
     * @param isVisibleToUser
     */
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            isFragmentVisible = true;
        }
        if (null == rootView()) {
            return;
        }
        onFragmentHiddenChanged(isVisibleToUser);
        //由不可见变为可见的过程，并且没有加载过数据
        if (!isFirstLoadData && isFragmentVisible) {
            loadData(true);
            return;
        }
        //已经加载过，且由可见变为不可见的过程
        if (isFragmentVisible) {
            loadData(false);
            isFragmentVisible = false;
        }
    }

    //相当于onHiddenChanged，调用setUserVisibleHint之后onHiddenChanged不会被调用，所以这里对外部提供一个方法
    protected void onFragmentHiddenChanged(boolean isHidden) {

    }
}
